home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / basic / CNKI.lha / CNKI / CNKI.ascii < prev    next >
Text File  |  1999-04-03  |  4KB  |  183 lines

  1. ;************************************
  2. ;* CNKI file format by Chris Deeney *
  3. ;*             3-4-1999             *
  4. ;************************************
  5. CNkIvEr$="CNKI V1.0 By Chris Deeney"
  6. ;***********************************
  7. ;*-*- Error codes for LoadCNK:- -*-*
  8. ;***********************************
  9. ;#0 = File doesn't exist / Can't read file!
  10. ;#1 = Not a CNKI file format!
  11. ;#2 = File is corrupt!
  12. ;#3 = Can't allocate enough fast ram!
  13. ;#4 = Illegal parameters!
  14.  
  15. Function LoadCNK{im,dir$}
  16. If im<0 Then Function Return 4
  17. If dir$="" Then Function Return 4
  18.  
  19. ecode=-1
  20. If ReadFile(0,dir$)
  21. FileInput 0
  22.  
  23. ;;*** check header ***
  24. FileSeek 0,0
  25. i$=Inkey$(8)
  26. If i$="FORMCNKI"
  27.  
  28. ;is the file compressed?
  29. FileSeek 0,20
  30. i$=Inkey$(4)
  31. If i$="    " OR i$="COMP"
  32. If i$="COMP" Then compressed=-1
  33.  
  34. ;get number of frames
  35. FileSeek 0,8
  36. i$=Inkey$(4)
  37. h$=""
  38. f=Asc(Mid$(i$,1,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  39. f=Asc(Mid$(i$,2,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  40. f=Asc(Mid$(i$,3,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  41. f=Asc(Mid$(i$,4,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  42. shaps=Hex#(h$)
  43. If shaps=0 Then PopInput:CloseFile 0:Function Return 2
  44.  
  45. ;get shape width
  46. FileSeek 0,12
  47. i$=Inkey$(4)
  48. h$=""
  49. f=Asc(Mid$(i$,1,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  50. f=Asc(Mid$(i$,2,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  51. f=Asc(Mid$(i$,3,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  52. f=Asc(Mid$(i$,4,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  53. sw=Hex#(h$)
  54. If sw=0 Then PopInput:CloseFile 0:Function Return 2
  55.  
  56. ;get shape height
  57. FileSeek 0,16
  58. i$=Inkey$(4)
  59. h$=""
  60. f=Asc(Mid$(i$,1,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  61. f=Asc(Mid$(i$,2,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  62. f=Asc(Mid$(i$,3,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  63. f=Asc(Mid$(i$,4,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  64. sh=Hex#(h$)
  65. If sh=0 Then PopInput:CloseFile 0:Function Return 2
  66. ;;******
  67.  
  68. ; allocate some memory to store the uncompressed file
  69. size.l=sw*sh*shaps
  70. addy.l=AllocMem(size.l,1LSL2) ;1LSL2=fastram
  71. If addy.l=0 Then PopInput:CloseFile 0:Function Return 3
  72.  
  73. ;;*** if the file is compressed ***
  74. If compressed=-1
  75.  
  76. ;** decompress the file into addy **
  77. z.l=24 ; read position after header
  78. dp.l=0 ; addy offset in mem
  79. Repeat
  80. FileSeek 0,z.l
  81. i$=Inkey$(1)
  82. cl=Asc(i$)
  83. z.l+1
  84.  
  85. FileSeek 0,z.l
  86. i$=Inkey$(1)
  87. c=Asc(i$)
  88. ;c$=Chr$(c)
  89. For n=1 To cl
  90. Poke.b addy.l+dp.l,c
  91. dp.l+1
  92. Next
  93. z.l+1
  94. Until Eof(0)
  95. ;**
  96.  
  97. Else FileSeek 0,24:ReadMem 0,addy.l,size.l ;*Else load it straight into addy
  98. End If
  99. ;;******
  100. fok=-1
  101.  
  102. Else ecode=2
  103. End If
  104.  
  105. Else ecode=1
  106. End If
  107.  
  108. PopInput
  109. CloseFile 0
  110. Else ecode=0
  111. End If
  112.  
  113. ;;*** if every thing whent ok, then decode images ***
  114. If fok=-1
  115. size.l=sw*sh; work out size for 1 frame
  116. faddy.l=addy.l
  117.  
  118.  
  119. ;** make some shapes! **
  120. For n=0 To shaps-1
  121.  
  122. ;allocate some memory for a shape
  123. saddy.l=AllocMem(size.l+16,1LSL2) ;1LSL2=fastram
  124. If saddy.l=0 Then Function Return 3
  125.  
  126. ;work out 16 byte offset
  127. taddy.l=Int(saddy.l/16):taddy.l*16
  128. If taddy.l<saddy.l Then taddy.l+16
  129.  
  130. faddy.l=addy.l+(n*size.l)
  131.  
  132. For z.l=0 To size.l-1
  133. col=Asc(Peeks$(faddy.l+z.l,1))
  134. If col=255 Then col=Asc(Peeks$(MShapePtr(im-1)+z.l,1))
  135. Poke.b taddy.l+z.l,col
  136. Next
  137.  
  138.  
  139. MCludgeShape im,sw,sh,taddy.l
  140. MMakeCookie im
  141. im+1
  142.  
  143. Next
  144. ;**
  145.  
  146. End If
  147. ;;******
  148.  
  149. Function Return ecode
  150. End Function
  151.  
  152. ;** returns number of frames in a CNKI file
  153. Function.w CnkFrames{dir$}
  154. If ReadFile(0,dir$)
  155. FileInput 0
  156.  
  157. ;;*** check header ***
  158. FileSeek 0,0
  159. i$=Inkey$(8)
  160. If i$="FORMCNKI"
  161.  
  162. ;get number of frames
  163. FileSeek 0,8
  164. i$=Inkey$(4)
  165. h$=""
  166. f=Asc(Mid$(i$,1,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  167. f=Asc(Mid$(i$,2,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  168. f=Asc(Mid$(i$,3,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  169. f=Asc(Mid$(i$,4,1)):f$=Hex$(f):h$+Mid$(f$,7,2)
  170. shaps=Hex#(h$)
  171. If shaps=0 Then PopInput:CloseFile 0:Function Return -1
  172. Else PopInput:CloseFile 0:Function Return -1
  173. End If
  174.  
  175. PopInput
  176. CloseFile 0
  177. Else Function Return -1
  178. End If
  179.  
  180. Function Return shaps
  181. End Function
  182.  
  183.